Экосистема экосистема HIP представляет собой тонкий слой абстракции, предназначенный для обеспечения совместимости исходного кода между архитектурами AMD и NVIDIA. Она использует стек ROCm (Radeon Open Compute) стек, в частности, используя архитектуру гетерогенных систем (HSA) время выполнения и драйвер ядра-слияния (KFD).
1. Инициализация запуска
Инициализация начинается с низкоуровневых рукопожатий драйверов ядра через hsa_init(0, ...) и hsaKmtOpenKFD(...). Эти вызовы устанавливают коммуникационный мост между приложениями в пользовательском режиме и аппаратным обеспечением графических процессоров AMD.
2. Обнаружение топологии и свойств
Перед запуском ядер среда выполнения определяет возможности аппаратного обеспечения с помощью hsaKmtAcquireSystemProperties и hsaKmtGetNodeProperties. Она сопоставляет физическую память с узлами графических процессоров с помощью hsaKmtMapMemoryToGPUNodes, обеспечивая видимость таблицы страниц для устройства.
3. Путь компиляции
Мост между CUDA и HIP строится на двух столпах: hipify-perl (транспилятор на основе регулярных выражений) и hipcc (обёртка компилятора).
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. Логика версионирования
Совместимость обеспечивается с помощью точной формулы, чтобы гарантировать hipRuntimeGetVersion соответствовал таблицам расширений HSA:
$$\text{HIP\_ВЕРСИЯ} = \text{ОСНОВНАЯ} \times 10^7 + \text{МЛАДШАЯ} \times 10^5 + \text{ПАТЧ}$$